package com.shenmazong.user.controller;

import com.shenmazong.utils.IdWorker;
import com.shenmazong.utils.ResultResponse;
import com.shenmazong.vo.MessageVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.SerializationUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.io.Serializable;
import java.util.HashMap;

/**
 * @author 军哥
 * @version 1.0
 * @description: TODO
 * @date 2022/6/30 11:53
 */

@RestController
@Slf4j
@RequestMapping(value = "/msg")
public class SendMessageController {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @PostMapping(value = "/sendSimple")
    public ResultResponse sendSimple(@RequestParam("msg") String msg) {

        MessageVo messageVo = new MessageVo();
        messageVo.setId(IdWorker.getId());
        messageVo.setType(1);
        messageVo.setData(msg);

        // 对象序列化
        byte[] data = SerializationUtils.serialize(messageVo);

        rabbitTemplate.convertAndSend("simpleQueue", data);

        return ResultResponse.SUCCESS(msg);
    }

    @PostMapping(value = "/sendWork")
    public ResultResponse sendWork(@RequestParam("msg") String msg) {
        rabbitTemplate.convertAndSend("workQueue", msg);

        return ResultResponse.SUCCESS(msg);
    }

    @PostMapping(value = "/sendFanout")
    public ResultResponse sendFanout(@RequestParam("msg") String msg) {

        rabbitTemplate.convertAndSend("fanoutExchange", "",  msg);

        return ResultResponse.SUCCESS(msg);
    }

    @PostMapping(value = "/sendDirect1")
    public ResultResponse sendDirect1(@RequestParam("msg") String msg) {

        rabbitTemplate.convertAndSend("directExchange", "msg.login",  msg);

        return ResultResponse.SUCCESS(msg);
    }

    @PostMapping(value = "/sendDirect2")
    public ResultResponse sendDirect2(@RequestParam("msg") String msg) {

        rabbitTemplate.convertAndSend("directExchange", "msg.order",  msg);

        return ResultResponse.SUCCESS(msg);
    }

    @PostMapping(value = "/sendTopic")
    public ResultResponse sendTopic(@RequestParam("msg") String msg) {

        rabbitTemplate.convertAndSend("topicExchange", "msg.login",  msg+1);
        rabbitTemplate.convertAndSend("topicExchange", "msg.order",  msg+2);
        rabbitTemplate.convertAndSend("topicExchange", "msg.pay",  msg+3);
        rabbitTemplate.convertAndSend("topicExchange", "msg",  msg+4);

        return ResultResponse.SUCCESS(msg);
    }
}
